package com.qire.manhua.dal;

import com.qire.antsbinder.dal.DataWarehouse.MethodType;
import com.qire.antsbinder.dal.DataWarehouse.WarehouseCacheMode;
import com.qire.antsbinder.dal.annotation.DataAccess;
import com.qire.antsbinder.dal.annotation.ParamsAlias;
import com.qire.common.constant.Url;
import com.qire.manhua.model.vo.CommentReplyVO;
import com.qire.manhua.model.vo.CommentVO;
import com.qire.manhua.model.vo.MessageCommentDetailVO;
import com.qire.manhua.model.vo.OkResponseVO;

import java.util.List;

/**
 * 评论数据访问
 */
public interface ICommentDataDAL {

    /**
     * 通过漫画书的ID或者章节ID获取全书或漫画章节的评论列表
     * @param bookId    漫画书ID
     * @param chapterId 章节ID，0 为查询正本书籍的评论
     * @param pageNo    页码
     * */
    @DataAccess(url = Url.comment_list, methodType = MethodType.GET)
    List<CommentVO> fetchComicCommentList(@ParamsAlias(name = "book_id") int bookId, @ParamsAlias(name = "chapter_id") int chapterId, @ParamsAlias(name = "page") int pageNo);

    /**
     * 通过漫画书ID及评论ID获取更多的评论回复
     * @param bookId    漫画书的ID
     * @param commentId 评论ID
     * @param pageNo    页号
     * */
    @DataAccess(url = Url.comment_reply_list, methodType = MethodType.GET, cacheMode = WarehouseCacheMode.REQUEST_FAILED_READ_CACHE)
    List<CommentReplyVO> fetchReplyCommentList(@ParamsAlias(name = "book_id") int bookId, @ParamsAlias(name = "post_id") int commentId, @ParamsAlias(name = "page") int pageNo);

    /**
     * 通过漫画书及评论ID给评论点赞，投喜欢票
     * @param bookId    漫画书ID
     * @param commentId 评论ID*/
    @DataAccess(url = Url.comment_like, methodType = MethodType.GET)
    OkResponseVO voteToGiveLikeComment(@ParamsAlias(name = "book_id") int bookId, @ParamsAlias(name = "reply_id") int commentId);

    /**
     * 投诉举报评论
     * @param bookId    漫画ID
     * @param commentId 评论ID
     * @param reportType 投诉类型
     * @param content   投诉原因
     * @return
     */
    @DataAccess(url = Url.comment_report, methodType = MethodType.GET)
    OkResponseVO complaintComment(@ParamsAlias(name = "book_id") int bookId, @ParamsAlias(name = "reply_id") int commentId,
                                  @ParamsAlias(name = "report_type") int reportType, @ParamsAlias(name = "report_cause") String content);

    /**
     * 提交评论接口
     * @param bookId 漫画书ID
     * @param chapterId 章节ID，如果评论是回复给评论的，则章节ID写0，否则写章节ID
     * @param commentId 评论ID，如果评论是提交给章节的，则评论ID写0，否则写评论ID
     * @param content   评论内容
     * @param starsNumber 评论评分星级，暂未使用，最高5星
     * @return 提交接口结果信息
     */
    @DataAccess(url = Url.comment_add, methodType = MethodType.GET)
    OkResponseVO submitComment(@ParamsAlias(name = "book_id") int bookId, @ParamsAlias(name = "chapter_id") int chapterId,
                               @ParamsAlias(name = "reply_id") int commentId, @ParamsAlias(name = "post_content") String content,
                               @ParamsAlias(name = "star_num") int starsNumber);

    /**
     * 获取消息：评论详情
     * @param commentId 评论ID
     * @return
     */
    @DataAccess(url = Url.CommentDetailData)
    MessageCommentDetailVO fetchMessageCommentDetail(@ParamsAlias(name = "post_id") int commentId);

}
